android异步回调内存泄漏,为什么异步网络调用的回调方法在活动结束后不会导致内存泄漏?... |
您所在的位置:网站首页 › android 接口回调 › android异步回调内存泄漏,为什么异步网络调用的回调方法在活动结束后不会导致内存泄漏?... |
为什么这个用于回调的匿名内部类实例不会导致活动泄漏 我假设你在这里的意思是它不会导致内存泄漏,但它肯定可以,因为你实例化匿名Callback是一个Activity 。 如果在Android Activity实例化一个内部类,然后将对该实例的引用传递给其他组件,只要该组件可以访问,那么内部类的实例也是如此。 例如,考虑一下: class MemorySink { static private Listcallbacks = new ArrayList(); public static void doSomething(Callback callback){ callbacks.add(callback); } } 如果您从某些活动创建了Callback实例并将它们传递给doSomething(callback) ,当其中一个Activity被销毁时,系统将不再使用该实例,预计垃圾收集器将释放该实例。 但是,如果MemorySink在这里引用了一个对该Activity有引用的Callback ,那么该Activity的实例即使在被销毁之后也会保留在内存中。 Bam,内存泄漏。 所以你说你的样本没有引起内存泄漏,我首先建议你试试MemorySink ,创建一个简单的Activity “MainActivity”,带有2个按钮,可能还有一些图像来增加内存占用。 在onCreate ,在第一个按钮上设置一个监听器: findViewById(R.id.firstButton).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MainA |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |